Linux utiliza como sistema de inicio SysVinit que se basa en un concepto de run-levels. Puede ser muy diferente de un sistema a otro, por lo que no puede suponer que porque las cosas funcionen en una distribución de Linux en particular, deben trabajar en LFS también. LFS tiene su propia manera de hacer las cosas, pero respeta los estándares aceptados.
SysVinit (que se conocerá como “init” de ahora en adelante) funciona mediante un esquema de niveles de ejecución. Hay siete (numerados del 0 al 6)-niveles (en realidad, hay más niveles de ejecución, pero son para casos especiales y por lo general no se utilizan. Véase init(8)
para mayores detalles), y cada uno de ellos indica las acciones que se supone que el ordenador realizará cuando se inicia. El nivel de ejecución por defecto es 3. Aquí están las descripciones de los diferentes niveles de ejecución:
0: parada del sistema
1: modo monousuario
2: modo mode multiusuario sin red
3: modo multiususario con red
4: reservado para personalizar, similar al modo 3
5: igual que 4, se utiliza usualmente para iniciar el entorno grágico (como X's xdm o KDE's kdm)
6: reinicia el sistema
Durante la inicialización del núcleo, el primer programa que se ejecuta se especifica ya sea en la línea de comandos o por defecto, es init.Este programa lee el archivo de inicialización /etc/inittab
.
Crea este archivo con:
cat > /etc/inittab << "EOF"
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc S
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty --noclear tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
# End /etc/inittab
EOF
Una explicación de este archivo de inicialización se encuentra en la página del manual de
inittab. Para LFS, el comando llave que se ejecuta es rc. El archivo de inicialización anterior instruiráa rc
para ejecutar todos los scripts que comienzan con una S en el directorio /etc/rc.d/rcS.d
seguido por todos los scripts que comienzan con una S en el archivo /etc/rc.d/rc?.d
donde el signo de interrogación se especifica mediante el valor initdefault.
Para su conveniencia, el scriptrc lee una biblioteca de funciones en/lib/lsb/init-functions
.
Esta biblioteca también lee un archivo de configuración opcional,
/etc/sysconfig/rc.site
. Cualquiera de los parámetros del archivo de configuración del sistema que se describen en las secciones siguientes se pueden colocar alternativamente en este archivo que permite la consolidación de todos los parámetros del sistema en este archivo.
Para comodidad de depuración, el script también registra toda salida a /run/var/bootlog
. Desde que el directorio
/run
es tmpfs, este archivo no es persistente a través de reinicios, sin embargo se añade al archivo de mayor permanencia
/var/log/boot.log
al final del proceso de arranque.
El cambio en los niveles de ejecución se hace coninit
<runlevel>
,
donde <runlevel>
es el
run-level destino. Por ejemplo, para reiniciar el ordenador, un usuario podría ejecutar el comando init
6el cual es un alias del comando reboot.Del mismo modo
init 0 es un alias para el comando
halt.
Hay una serie de directorios bajo /etc/rc.d
de la forma rc?.d
(donde? es el número de run-level)
y el directorio rcsysinit.d
, que contiene una serie de enlaces simbólicos. Algunos comienzan con una K, y otros con una S, y todos ellos tienen dos números después de la letra inicial. El K indican la parada (kill) de un servicio y la S significa iniciar un servicio. Los números determinan el orden en que se ejecutan los scripts, de 00 a 99 -mientras más bajo es el número, antes se ejecutará. Cuando init cambia a otro nivel de ejecución, los servicios apropiados son iniciados o parados, dependiendo del nivel de ejecución elegido.
Los scripts reales se hallan en /etc/rc.d/init.d
. Ellos hacen el trabajo real, y los enlaces simbólicos apuntan a ellos. Enlaces K y enlaces S apuntan a la misma secuencia de comandos en /etc/rc.d/init.d
. Esto se debe a que los scripts pueden ser llamados con parámetros como
start
, stop
, restart
, reload
, y status
. Cuando se encuentra un enlace K, el script adecuado se ejecuta con el argumento stop
Cuando se encuentra un enlace S, el script adecuado se ejecuta con el argumento start
.
Hay una excepción a esta explicación. Los enlaces que comienzan por S en los directorios rc0.d y rc6.d no inician nada. Ellos serán llamados con el parámetro stop para parar algo. La lógica detrás de esto es que cuando un usuario va a parar o reiniciar el sistema, nada hay que empezar. El sistema sólo debe ser detenido.
Estas son descripciones de lo que cada parámetro indica a los sacripts que hagan:
start
Se inicia el servicio.
stop
El servicio se detiene.
restart
El servicio se detiene y se vuelve a iniciar.
reload
La configuración del servicio se actualiza. Esto se utiliza después de que se modificó el archivo de configuración de un servicio, cuando el servicio no necesita ser reiniciado.
status
Indica si el servicio se está ejecutando y con qué PID.
Siéntase libre de modificar la forma en que el proceso de arranque se comporta (después de todo, es su propio sistema LFS). Lo aquí expuesto es un ejemplo de cómo se puede hacer.